char *p1="abc"和char p2[ ]="abc"有什么区别?
来源:百度知道 编辑:UC知道 时间:2024/05/29 20:18:44
char *GetMemory1(void)
{
char *p = "hello world";
return p;
}
char *GetMemory2(void)
{
char p[] = "hello world";
return p;
}
void main(void)
{
cout<<GetMemory1()<<endl<<GetMemory2()<<endl;
}
程序的输出是,GetMemory1()是hello world而GetMemory2()的输出是乱码。
对于char *p1="abc",即使在调用函数里面建立的,但"abc"有static const char *的性质吧,离开了调用函数时,把p1传出来还是能打印abc。
但对于char p2[ ]="abc",难道"abc"就不具有static const char *的性质?
char *p1="abc"和char p2[ ]="abc"有什么区别?
char *p1="abc"和char p2[ ]="abc"
"abc"既然是常量字符串,那么应该是在静态数据区分配空间,赋给p1,然后返回没问题,那赋给p2,也应该返回没问题吧?
{
char *p = "hello world";
return p;
}
char *GetMemory2(void)
{
char p[] = "hello world";
return p;
}
void main(void)
{
cout<<GetMemory1()<<endl<<GetMemory2()<<endl;
}
程序的输出是,GetMemory1()是hello world而GetMemory2()的输出是乱码。
对于char *p1="abc",即使在调用函数里面建立的,但"abc"有static const char *的性质吧,离开了调用函数时,把p1传出来还是能打印abc。
但对于char p2[ ]="abc",难道"abc"就不具有static const char *的性质?
char *p1="abc"和char p2[ ]="abc"有什么区别?
char *p1="abc"和char p2[ ]="abc"
"abc"既然是常量字符串,那么应该是在静态数据区分配空间,赋给p1,然后返回没问题,那赋给p2,也应该返回没问题吧?
p1是一个常量字符串,存储在常量存储区,在程序生命期内值不会改变。这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)
p2是一个局部数组,存储在栈内存,函数运行结束时被释放,当再回去寻找这块内存区域时,肯定就是乱码。。。
p1是指针,指向字符串的存储地址,p2是字符数组,表示存储数据是abc
http://tech.163.com/05/0329/10/1G0LS2O200091589.html
差不多!!
char ch[]="abc",如何理解?
数组 char s[ ]="abc"有几个元素
char* a=new char;a="abc";会泄露内存么?
cha a[]="zbc" 与char *b="abc"有什么区别
设staic char str[]="abc\0def";则strlen(str)=?
char a[20]={”1A2B3C”},b[20],*p1=a,*p2=b;
char a[10]="";是什么意思?
char s[]="ABCD";
char *s = "china";等价于 char *s;s = "china";对不对?
char*a="abc"为什么是对的?指针的赋植不是应该要取地址运算符&吗?